'use strict';

const moment = require('moment');
const { STRING, INTEGER, BIGINT, DATE, NOW, NUMERIC, DECIMAL, BOOLEAN } = require("sequelize").DataTypes;

let ScheduleModel = {
	name:"ScheduleModel",
	define: {
		id: { type: BIGINT, primaryKey: true, autoIncrement: true },
		taskId: { type: BIGINT, allowNull:false, field:'task_id' , comment:"任务表id" },
		namespace: { type: STRING(100), allowNull: false, defaultValue: '' ,field:'namespace' ,comment:"项目空间" },
		projectName: { type: STRING(100), allowNull: false, defaultValue: '' ,field:'project_name' ,comment:"项目名称" },
		taskName: { type: STRING(200), defaultValue: '' ,field:'task_name' ,comment:"任务名称" },
		hostName: { type: STRING(200), field:'host_name' ,comment:"执行任务的主机名" },
		nodeId: { type: STRING(200), field:'node_id' ,comment:"执行任务的结点ID，同台机器启动多个实例，会有不同的id" },
		pid: { type: INTEGER, field:'pid' ,comment:"执行任务的主机的进程ID" },
		ppid: { type: INTEGER, field:'ppid' ,comment:"执行任务的主机的父进程ID" },
		createdTime: {type: DATE, defaultValue: NOW , allowNull: true, field: 'created_time', comment: '数据添加时间'},
		updatedTime: {type: DATE, defaultValue: null , allowNull: true, field: 'updated_time', comment: '最后更新时间，即 任务完成时间/失败时间'},
		isSuccess: { type: BOOLEAN, allowNull: true, field:'is_success' ,defaultValue: null ,comment:"任务是否成功，true 表示成功，false 表示失败" },
		isFinished: { type: BOOLEAN, allowNull: false, field:'is_finished' ,defaultValue: false ,comment:"任务是否完成，true 表示完成，false 表示未完成" },
	},
	options:{
		tableName:'sys_task_schedule',
		// 自定义表名
		// 禁止修改表名，默认情况下，sequelize 将自动将所有传递的模型名称（define的第一个参数）转换为复数
		// 但是为了安全着想，复数的转换可能会发生变化，所以禁止该行为
		freezeTableName:true,

		// 是否需要增加createdAt、updatedAt、deletedAt字段
		timestamps:false,

		// 不需要createdAt字段
		createdAt:'created_date',

		// 将updatedAt字段改个名
		//updatedAt: 'modifiedOn',
		updatedAt:'updated_date',
		// 将deletedAt字段改名
		// 同时需要设置paranoid为true（此种模式下，删除数据时不会进行物理删除，而是设置deletedAt为当前时间
		//deletedAt: 'deletedOn',
		deletedAt:false,
		// paranoid: true
	}
};

module.exports = ScheduleModel;

